package com.ventas;

import java.util.ArrayList;

import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;

import android.app.ActionBar;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffColorFilter;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import clasesGraficas.VentasN3;

import com.BD.BD_SQLite;
import com.clases.Venta;
import com.reportes.R;
import com.reportes.Reporte_Cancelaciones;
import com.reportes.csmmm;
import com.reportes.login;

public class Venta_Promotor_Nivel3 extends Activity
{
	/*** FLAGS o PARAMETROS PASADOS ***/
	private int tipoNivel3 = 0; //Depende de que tipo de tercer nivel se quiera. 1 = tipoEvento, 2 = Canal, 3 = RangoEdad
	
	private int flagTiempo = 0; // 1=mes, 2=trimenstre, 3=ano
	private int flagLima = 0;
	private int flagProvincia = 0;
	
    private int anhoInicio;
    private int mesInicio;
    private int diaInicio;

    private int anhoFin;
    private int mesFin;
    private int diaFin;
    
    private String[] promotores;
    private int periodo;
	
	/*** GRAFICA ***/
	private GraphicalView mChartView = null;
	private LinearLayout layoutGrafica = null;
	private String tituloGrafica = "";
    
    /*** PARAMETROS USADOS EN LA ClASES ***/
	private TextView fechaInicio;
    private TextView fechaFin;
    private View view;
    
    static final int DATE_DIALOG_Inicial = 0;
    static final int DATE_DIALOG_Final = 1;

	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.ventas);
		
		this.inicializaFlags();
		this.inicializaFechaPromotor();
		
		/*** ACCION BAR ***/
		Resources res = getResources();
		Drawable myImage = res.getDrawable(R.drawable.background2);		
		ActionBar actionBar = this.getActionBar();
		actionBar.setBackgroundDrawable(myImage);
		actionBar.setDisplayUseLogoEnabled(true);
		actionBar.setDisplayShowTitleEnabled(false);
		
		/*** DISENO DE PANTALLA ***/
		acomodarPantalla(); //Quitar y deshabilitar botones
		setColorTiempo();
		setColorUbicacion();
		
		GenerarReporte(view);
	}
	
	public void GenerarReporte(View view)
	{
		/*//ACA SE HACE LA LLAMADA AL A BASE DE DATOS
		int[] valoresPie = new int[4];
		valoresPie[0] = 1000;
		valoresPie[1] = 400;
		valoresPie[2] = 200;
		valoresPie[3] = 100;
		String [] titulos = {"as","df","we","qw"};
		//#########################################*/
		
		ArrayList<Venta> ventas = leerDatos();
		double[] valoresPie = new  double[ventas.size()];
		String[] titulos = new String[ventas.size()];
		
		for (int i=0;i<ventas.size();i++)
		{
			valoresPie[i] = ventas.get(i).getMonto();
			titulos[i] = ventas.get(i).getNomCanal();
		}
		
		switch (tipoNivel3)
		{
			case 1:
				this.tituloGrafica = "Ventas por promotor y por Tipo de Evento";
				break;
			case 2:
				this.tituloGrafica = "Ventas por promotor y por Canal";
				break;
			case 3:
				this.tituloGrafica = "Ventas por promotor y por Rango de Edades";
				break;
		}	
		
		VentasN3 ventasNivel3 = new VentasN3();
		if (tipoNivel3 != 2)
			ventasNivel3.ejecutar(valoresPie,tituloGrafica,titulos);
		else
		{
			double[] valoresPie1 = new double[4];
			valoresPie1[0] = 1000;
			valoresPie1[1] = 400;
			valoresPie1[2] = 200;
			valoresPie1[3] = 100;
			String [] titulos1 = {"Canal 1","Canal 2","Canal 3","Canal4"};
			ventasNivel3.ejecutar(valoresPie1,tituloGrafica,titulos1);
		}
		
		layoutGrafica = (LinearLayout)findViewById(R.id.idpanelgraficoventa);
		mChartView = ChartFactory.getPieChartView(Venta_Promotor_Nivel3.this, ventasNivel3.getSeries(), ventasNivel3.getmRenderer());
		layoutGrafica.removeAllViews();
		layoutGrafica.addView(mChartView, new LayoutParams(LayoutParams.FILL_PARENT,
				LayoutParams.FILL_PARENT));
	}
	
	private ArrayList<Venta> leerDatos()
	{
		BD_SQLite db = new BD_SQLite(this);
		ArrayList<Venta> respuesta = new ArrayList<Venta>();
		
		String ubicacion = "";
		if (flagLima == 1)
			ubicacion = "Lima";
		else if (flagProvincia == 1)
			ubicacion = "Provincia";
		else if (flagLima == 1 && flagProvincia == 1)
			ubicacion = "Todos";
		

		if (tipoNivel3 == 2)//CANAL
		{
			//if (flagTiempo == 1){ respuesta = db.getVentaPromotorCanalMes(promotores, (anhoInicio + periodo - 1), ubicacion);};
			//if (flagTiempo == 2){respuesta = db.getVentaPromotorCanalTrimestral(promotores, trimestre, anho, ubicacion)};
			//if (flagTiempo == 3){ respuesta = db.getVentaPromotorCanalAnual(promotores, (anhoInicio + periodo - 1), ubicacion);}
		}
		
		if (tipoNivel3 == 1)//TIPO EVENTO
		{
			//if (flagTiempo == 1){ respuesta = db.getVentaPromotorCanalMes(promotores, (anhoInicio + periodo - 1), ubicacion);};
			//if (flagTiempo == 2){respuesta = db.getVentaPromotorCanalTrimestral(promotores, trimestre, anho, ubicacion)};
			if (flagTiempo == 3){ respuesta = db.getVentaPromotorTipoEventoAnual(promotores, (anhoInicio + periodo - 1), ubicacion);};	
		}
		
		if (tipoNivel3 == 3)//RANGO EDADES
		{
			//if (flagTiempo == 1){ respuesta = db.getVentaPromotorCanalMes(promotores, (anhoInicio + periodo - 1), ubicacion);};
			//if (flagTiempo == 2){respuesta = db.getVentaPromotorCanalTrimestral(promotores, trimestre, anho, ubicacion)};
			if (flagTiempo == 3){ respuesta = db.getVentaPromotorEdadAnual(promotores, (anhoInicio + periodo - 1), ubicacion);};	
		}
		
		db.close();
		
		return respuesta;
	}
	
	/*** INCIALIZA FECHA ***/
	private void inicializaFechaPromotor()
	{	
		fechaInicio = (TextView) findViewById(R.id.fechaInicio);
		fechaInicio.setText("Fecha Inicio: " + diaInicio + "/"+ (mesInicio +1) + "/"+ anhoInicio);
		fechaFin = (TextView) findViewById(R.id.fechaFin);
		fechaFin.setText("Fecha Fin: " + diaFin + "/"+ (mesFin +1) + "/"+ anhoFin);
	}
	
	/*** FECHAS ***/
	protected Dialog onCreateDialog(int id)
	{
		switch (id)
		{
			case DATE_DIALOG_Inicial:
				DatePickerDialog dialogoInicio =new DatePickerDialog(this, mDateSetListenerInicio, anhoInicio, mesInicio, diaInicio);
				dialogoInicio.getDatePicker();
				return dialogoInicio;
			case DATE_DIALOG_Final:
				DatePickerDialog dialogoFin =new DatePickerDialog(this, mDateSetListenerFin, anhoFin, mesFin, diaFin);
				dialogoFin.getDatePicker();
				return dialogoFin;
		}
		
		return null;
	}
	 
	/*** FECHA INICIO***/
	private DatePickerDialog.OnDateSetListener mDateSetListenerInicio = new DatePickerDialog.OnDateSetListener()
		{
			public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)
			{
				anhoInicio = year;
				mesInicio = monthOfYear;
				diaInicio = dayOfMonth;
				fechaInicio = (TextView) findViewById(R.id.fechaInicio);
				fechaInicio.setText("Fecha Inicio: " + diaInicio + "/"+ (mesInicio + 1) + "/"+ anhoInicio);
			}
		};
	
	/*** FECHA FIN ***/
	private DatePickerDialog.OnDateSetListener mDateSetListenerFin = new DatePickerDialog.OnDateSetListener()
		{
			public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)
			{
				anhoFin = year;
				mesFin = monthOfYear;
				diaFin = dayOfMonth;
				fechaFin = (TextView) findViewById(R.id.fechaFin);
				fechaFin.setText("Fecha Fin: " + diaFin + "/"+ (mesFin + 1) + "/"+ anhoFin);
			}
		};
	
	/*** PINTADO DE BOTONES ***/
	public void setColorTiempo(){
		
		Button buttonMensuales = (Button) findViewById(R.id.buttonMensuales);
		Button buttonAnuales = (Button) findViewById(R.id.buttonAnuales);
		Button buttonTrimestrales = (Button) findViewById(R.id.buttonTrimestrales);
		
		Drawable d1 = buttonMensuales.getBackground();
		Drawable d2 = buttonTrimestrales.getBackground();
		Drawable d3 = buttonAnuales.getBackground();
	
		if (flagTiempo==1)
			d1.setColorFilter(new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP));
		else if (flagTiempo==2)
			d2.setColorFilter(new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP));
		else if (flagTiempo==3)
			d3.setColorFilter(new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP));
	}
	
	public void setColorUbicacion()
	{
		Button buttonLima = (Button) findViewById(R.id.buttonLima);
		Button buttonProvincia = (Button) findViewById(R.id.buttonProvincia);
		Drawable d1 = buttonLima.getBackground();
		Drawable d2 = buttonProvincia.getBackground();
		
		if (flagLima == 1)
			d1.setColorFilter(new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP));
    	else
    	{
    		buttonLima.invalidateDrawable(d1);
    		d1.clearColorFilter();
    	}
		if(flagProvincia==1)
            d2.setColorFilter(new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP));
		else
		{
			buttonProvincia.invalidateDrawable(d2);
            d2.clearColorFilter();
		}
	}
	
	/*** INICIALIZACION DE FLAG ***/
	private void inicializaFlags()
	{
		tipoNivel3 = this.getIntent().getExtras().getInt("tipoNivel3");
		promotores = this.getIntent().getExtras().getStringArray("promotores");
		periodo = this.getIntent().getExtras().getInt("periodo");
		
		flagLima= this.getIntent().getExtras().getInt("flagLima");
		flagProvincia= this.getIntent().getExtras().getInt("flagProvincia");
		flagTiempo= this.getIntent().getExtras().getInt("flagTiempo");
		
		anhoInicio= this.getIntent().getExtras().getInt("anhoInicio");
		mesInicio= this.getIntent().getExtras().getInt("mesInicio");
		diaInicio= this.getIntent().getExtras().getInt("diaInicio");
		
		diaFin= this.getIntent().getExtras().getInt("diaFin");
		mesFin= this.getIntent().getExtras().getInt("mesFin");
		anhoFin= this.getIntent().getExtras().getInt("anhoFin");
	}
	
	/*** DISENO DE PANTALLA ***/
	private void acomodarPantalla()
	{
		LinearLayout layoutVista = (LinearLayout) findViewById(R.id.idpanelgraficovista);
		LinearLayout layoutVistaTxt = (LinearLayout) findViewById(R.id.idpanelgraficovistatxt);

		Button buttonMensuales = (Button) findViewById(R.id.buttonMensuales);
		Button buttonAnuales = (Button) findViewById(R.id.buttonAnuales);
		Button buttonTrimestrales = (Button) findViewById(R.id.buttonTrimestrales);
		Button buttonLima = (Button) findViewById(R.id.buttonLima);
		Button buttonProvincia = (Button) findViewById(R.id.buttonProvincia);
		Button ButtonInicio = (Button) findViewById(R.id.ButtonInicio);
		Button ButtonFin = (Button) findViewById(R.id.ButtonFin);
		Button button2 = (Button) findViewById(R.id.button2);

		layoutVistaTxt.setVisibility(View.GONE);
		layoutVista.setVisibility(View.GONE);
		
		buttonMensuales.setEnabled(false);
		buttonAnuales.setEnabled(false);
		buttonTrimestrales.setEnabled(false);
		buttonLima.setEnabled(false);
		buttonProvincia.setEnabled(false);
		ButtonInicio.setEnabled(false);
		ButtonFin.setEnabled(false);
		button2.setEnabled(false);
	}
	
	/*** ACTION BAR ***/
	@Override
    public boolean onCreateOptionsMenu(Menu menu)
	{
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menuprincipal, menu);
        return true;
    }
	
	@Override
	public boolean onOptionsItemSelected(MenuItem item)
	{
		// Handle item selection
		switch (item.getItemId())
		{
			case R.id.logout:
				Intent logo = new Intent(this,login.class);
				startActivity(logo);
				return true;
			case R.id.ventas:
				Intent ventas = new Intent(this,VentasGenerales.class);
				startActivity(ventas);
				return true;
			case R.id.consultas:
				Intent consultas = new Intent(this,login.class);
				startActivity(consultas);
				return true;
			case R.id.cancelaciones:
				Intent cancelaciones = new Intent(this,Reporte_Cancelaciones.class);
				startActivity(cancelaciones);
				return true;
			case R.id.evolutivo:
				Intent evolutivo = new Intent(this,csmmm.class);
				startActivity(evolutivo);
				return true;
			default:
				return super.onOptionsItemSelected(item);
		}
	}

	/*** GET/SET ***/
	public int getTipoNivel3() { return tipoNivel3;}
	public void setTipoNivel3(int tipoNivel3) { this.tipoNivel3 = tipoNivel3;}
}